NUZLOCKer 1.2.0 - The Persistence Update
=========================================

Previous release: 1.1.1
Suggested release: 1.2.0
Version type: Minor feature release
Requires: Character Select
Optional integration: SIDEKICKer 1.1 or newer

NEW GAMEPLAY FEATURES
- Added STARLOCKE as a host-controlled rules option.
- In STARLOCKE, collecting a star awards one eligible character to that player's pool.
- STARLOCKE rewards support both personal pools and the shared/global pool.
- Added duplicate-interaction protection so one star object cannot award repeatedly during the same collection.
- Added Persistent Corpses, enabled by default and configurable per player.
- Added Boos At Revisited Death Sites as a separate optional corpse setting.
- Added per-player SIDEKICKer Compatibility instead of restricting the toggle to the host.

PERSISTENT CORPSE SYSTEM
- Records the level, area, act, position, facing direction, owner, and character model for each corpse.
- Synchronizes corpse records through player sync data so corpses do not depend on the owner remaining nearby.
- Reconstructs recorded corpses when another player enters or returns to the matching level and area.
- Keeps corpse objects intangible, gravity-free, and fixed at their recorded transform.
- Freezes corpse animation frames and neutralizes head and torso movement during rendering.
- Captures the defeated Character Select character and costume before NUZLOCKer applies the replacement.
- Prevents replacement pool characters from being used as the corpse model.
- Applies the dead-eye facial state while rendering the corpse, then restores the living player's state.
- Uses a deterministic white-grey metal appearance instead of borrowing unstable live player palettes.
- Excludes pitfall deaths from corpse creation so bodies are not suspended over death planes.
- Clears corpse records when a NUZLOCKer session ends or a new session begins.
- Limits synchronized corpse history to 16 corpses per owner to control sync size and object count.

POOL AND CHARACTER SELECTION FIXES
- Added protected-pool tracking for characters currently in use.
- Prevented pool trimming from deleting a character currently used by the local player.
- Prevented shared-pool trimming from deleting characters currently used by connected players.
- Prevented random pool generation from selecting the same character already being played.
- Prevented rerolls and replacement selection from choosing reserved or already active shared-pool entries.
- Refilled pools from eligible entries when Character Select changes invalidate existing entries.
- Preserved valid active entries while resizing or rebuilding a pool.
- Added pool revision synchronization so integrations can detect pool changes reliably.
- Exported deterministic pool ordering for SIDEKICKer instead of relying on unordered table iteration.
- Aligned SIDEKICKer manual switching with the order displayed by NUZLOCKer's pool panel.
- Reduced cases where manual SIDEKICKer switching skipped pool members.

PALETTE RESPAWN FIXES
- Reworked PALETTE RESPAWN: ON so it selects a valid Character Select preset for the new character.
- Preserved the existing CUSTOM and RANDOM palette modes.
- Added synchronized palette state so remote players receive the selected respawn palette.
- Added delayed palette application after character switching so Character Select initialization does not overwrite it.
- Added controlled reapplication for palette overrides that need another frame to settle.
- Clears local and remote palette overrides correctly when PALETTE RESPAWN is OFF.

MENU AND SETTINGS CHANGES
- Moved SIDEKICKer Compatibility into the per-player section of the mod menu.
- Replaced the old SIDEKICKer host slot with STARLOCKE.
- Removed the unused ADVANCED ACTIONS button.
- Added a RUN MANAGEMENT ACTIONS heading to the final menu page.
- Grouped QUIT CURRENT NUZLOCKE, pool randomizers, character randomizers, and RESET MOD on the final page.
- Restored QUIT CURRENT NUZLOCKE to a selectable menu position.
- Fixed controls and labels bleeding through the page-navigation row.
- Added Persistent Corpses and Boos At Revisited Death Sites menu toggles.
- Persisted the new STARLOCKE, corpse, Boo, and per-player SIDEKICKer settings.

DEATH, EXIT, AND SESSION FIXES
- Added a dedicated pitfall bridge to recognize death-exit actions and death-plane surfaces.
- Added a pause-exit grace period so leaving through the pause menu does not spend a pool character.
- Prevented non-death level exits from being treated as character losses.
- Prevented duplicate pitfall losses from repeated action hooks.
- Kept delayed loss handling from recording a corpse at the castle instead of the original death site.
- Reset pending death state safely when a pause exit or invalid session transition occurs.

AUDIO AND STABILITY
- Includes mk_itemloop.ogg and mk_itemselect.ogg in the release package.
- Added guarded sample/stream loading with multiple valid relative path forms.
- Isolated corpse, pitfall, exit-guard, audio, and manual-swap helpers from the release-critical main file.
- Added protected calls and one-time corpse-handler error reporting to prevent repeating error spam.
- Kept main.lua at 199 top-level locals, below sm64coopdx's 200-local limit.

KNOWN LIMITATIONS
- Corpse persistence lasts for the current NUZLOCKer network session; it is not saved across server restarts.
- Corpse history is capped at 16 records per owner.
- Exact death palettes are not retained. Corpses intentionally use the white-grey fallback appearance.
- Some highly customized Character Select models may implement their own metal or facial rendering.
- Ordered SIDEKICKer switching requires the matching updated SIDEKICKer release.
- Custom character compatibility still depends on those character mods exposing valid Character Select models.

INSTALLATION
1. Remove or rename the old Nuzlocker folder.
2. Place the included Nuzlocker folder in the sm64coopdx mods folder.
3. Do not merge the release with an older folder containing backup Lua files.
